package com.bill.concurrency.example.singleton;

import com.bill.concurrency.annotations.NotRecommend;
import com.bill.concurrency.annotations.NotThreadSafe;
import com.bill.concurrency.annotations.ThreadSafe;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;

/**
 * 构建一个单例类。
 * 懒汉模式。单例实例在第一次使用时才实例化
 */
@Slf4j
@ThreadSafe
@NotRecommend
public class SingletonExample3 {
    //单例对象
    private static SingletonExample3 instance=null;
    /**
     * 私有构造器，一定要有。
     */
    private SingletonExample3(){

    }


    /**
     * 静态工厂方法。
     * 通过加入Synchronized 加入并发控制，构建线程安全的对象
     * 不推荐，有性能的开销。
     * @return
     */
    public synchronized static  SingletonExample3 getInstance(){
        if (instance==null){
            instance=new SingletonExample3();
        }
        return instance;
    }
}
